#ifndef __FP_DEVICE_HEAD__
#define __FP_DEVICE_HEAD__

#include <iostream>
#include <unistd.h>
#include <string.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>

#include <iostream>
#include "../dev_uart/dev_uart.h"
#include "fp_protocol.h"
#include <thread>
#include <chrono>
using namespace std;

#define FINGERPRINT_DEVICE_BAUDRATE 57600
#define ACK_PROTOCOL_FIXED_SIZE 9

class fp_Device{
public:
    fp_Device(const string &devicename,const uint32_t baudRate);
    ~fp_Device();

    // 发送协议包
    bool sendProtocolPacket(vector<uint8_t> packetData);
    // 接收指纹设备的应答包
    bool receiveProtocolAckPacket(vector<uint8_t> &packetData);

    // 握手函数
    bool handshake();

    // 录指纹图像
    bool captureFingerprintImage();

    // 生成指纹特征码
    bool generate_fp_FeatureCode(uint8_t bufId);

    // 合成指纹模板
    bool synthesize_fp_Template();

    // 保存模板
    bool saveTemplate(uint16_t pageId, uint8_t bufId = 1);

    // 分布录指纹
    bool enrollFingerprint(uint16_t pos);

    // 读取指纹库中有效模板的个数
    bool getVaild_TemplateNums(uint16_t &nums);
    // 清空指纹
    bool clear_fp_Data();

private:
    Dev_Uart* linuxUart{nullptr};
};

#endif